import dayjs from 'dayjs'
import { request } from '../../request'
import { uuid } from '@/utils'

export const defaultUser: ApiModels.base.ApplicationUser = {
  id: uuid.new(),
  userName: '',
  name: '',
  avatarUrl: '',
  date: dayjs().format('YYYY-MM-DD HH:mm:ss'),
}

export const defaultNewUser: ApiModels.base.CreateUserModel = {
  userName: '',
  name: '',
  avatarUrl: '',
  date: dayjs().format('YYYY-MM-DD HH:mm:ss'),
  email: 'user@youdomain.com',
  role: '业务员',
  password: '',
  confirmPassword: '',
}

export type UserQueryParamsType = ApiModels.IBaseQueryParams & {
  role?: ApiModels.base.RoleType | ''
  startDate?: string
  endDate?: string
}

/**
 * 获取系统用户分页列表
 * @param params - 查询参数
 */
export function fetchUserList(params?: UserQueryParamsType) {
  return request.get<ApiModels.PageList<ApiModels.base.ApplicationUser>>('/base/users/list', {
    params,
  })
}

/**
 * 获取系统用户详情
 * @param id - 系统用户id
 */
export function fetchUserDetail(id: string) {
  return request.get<ApiModels.base.ApplicationUser>(`/base/users/get/${id}`)
}

/**
 * 获取系统用户详情
 * @param name - 系统用户登录名称
 */
export function fetchUserDetailByName(name: string) {
  return request.get<ApiModels.base.ApplicationUser>(`/base/users/getByName/${name}`)
}

/**
 * 获取系统用户权限
 * @param name - 系统用户登录名称
 */
export function fetchUserPermissionByName(name: string) {
  return request.get<ApiModels.base.ClientRoute>(`/base/users/getPermission?username=${name}`)
}

/**
 * 获取用户路由数据
 * @param id - 用户id
 * @description 后端根据用户id查询到对应的角色类型，并将路由筛选出对应角色的路由数据返回前端
 */
export function fetchUserRouteList(id: string) {
  return request.post<ApiModels.base.ClientRoute>('/base/user/getUserRoutes', { userId: id })
}

/**
 * 新增系统用户
 * @param data - 系统用户模型
 */
export function createUser(data: ApiModels.base.CreateUserModel) {
  return request.post<ApiModels.base.ApplicationUser>('/base/users/create', data)
}

/**
 * 更新系统用户
 * @param data - 系统用户模型
 */
export function updateUser(data: ApiModels.base.UserProfile) {
  return request.put<ApiModels.base.ApplicationUser>('/base/users/update', data)
}

/**
 * 更改用户密码
 * @param data - 更新密码模型
 */
export function changePassword(data: ApiModels.base.ChangePasswordModel) {
  return request.post<any>('/base/users/changePassword', data)
}

/**
 * 重置用户密码
 * @param data - 重置密码模型
 */
export function resetPassword(data: ApiModels.base.ResetPasswordModel) {
  return request.post<any>('/base/users/resetPassword', data)
}

/**
 * 删除系统用户
 * @param id - 系统用户id
 */
export function deleteUser(id: string) {
  return request.delete<ApiModels.base.ApplicationUser>(`/base/users/delete/${id}`)
}

/**
 * 删除系统用户
 * @param name - 系统用户登录名称
 */
export function deleteUserByName(name: string) {
  return request.delete<ApiModels.base.ApplicationUser>(`/base/users/deleteByName/${name}`)
}
